iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

再來就是做迴圈內的事了,兩邊都做了Jump的動作。
https://ithelp.ithome.com.tw/upload/images/20240924/20169016SIBJiELbBC.png
https://ithelp.ithome.com.tw/upload/images/20240924/20169016u6Ri4FcnhN.png

GDB比較快知道,跳到main+58的位址,因此我們直接看到+58的位址,簡單來說就是進行比較,是剛剛放入的0的位址RBP-0x4與0x5進行比較。
https://ithelp.ithome.com.tw/upload/images/20240924/20169016xlVr1IfPvo.png

IDA的部分往下看一點也能發現Jump到的loc_1004010BB這個Function,可以發現裡面做的事情一模一樣,同樣是比較RBP-0x4中的值是否為5。

再下一行就是做JLE,JLE意思是Jump if Less or Equal,如果CMP的值小於等於就轉跳,這個時候就是EFLAGS出場的時候了,雖然表面上是做比較而已,但實際上是做相減,因此會用到ZF、CF和SF(查看是否為零、是否進位以及是否為負數),這邊第一個做的是0-5,因此做完第一次的期望是0需要進位和會變負數,因此CF和SF會為1。

先看做CMP之前的EFLAGS狀態,IF是Interrupt enable flag,但這邊與我們需要注意的無關,有興趣的可以探索其他的EFLAGS,接下來的EFLAGS我們只會注意CMP可能會有變化的EFLAGS。
https://ithelp.ithome.com.tw/upload/images/20240924/20169016s7fFRRGId7.png
https://ithelp.ithome.com.tw/upload/images/20240924/20169016Q71mC0XzAX.png

做了第一次的比較後
https://ithelp.ithome.com.tw/upload/images/20240924/20169016pX8zgbEdta.png
https://ithelp.ithome.com.tw/upload/images/20240924/20169016EAfFdY0fh7.png
https://ithelp.ithome.com.tw/upload/images/20240924/20169016IJyaEOXCTt.png

可以看到CF、AF和SF都改變了值,與我們一開始想的一樣,進位與負數皆為1,這裡還多了AF,因為此運算是低四位的,但這邊我們先不管它。
那0-5這個結果與JLE的期望相同,因此這邊就會跳到GDB main+42,IDA loc_1004010AB這邊。
https://ithelp.ithome.com.tw/upload/images/20240924/20169016M23kqxEGod.png
https://ithelp.ithome.com.tw/upload/images/20240924/20169016POCwneCROc.png


上一篇
將值放入Stack中
下一篇
Reverse 迴圈內輸出字串
系列文
從0開始的打Pwn教學14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言